import java.util.HashSet;

public class LongestPalindromeString {

    //最长回文串 -- 回文串是正读和反读都是一样的字符串
    //给定一个包含大写和小写字母的字符串，找到通过这些字母构成的最长的回文串。构造过程中区分大小写
    //构成回文有两种情况 ： 1、字符出现的次数是双数的组合  2、字符出现次数为双数的组合 + 一个只出现了一次的字符
    public int longestPalindrome(String s) {
        if (s.length() == 0) {
            return 0;
        }
        //存放字符
        HashSet<Character> hashSet = new HashSet<>();
        char[] chars = s.toCharArray();
        int count = 0;
        for (int i = 0; i < chars.length; i++) {
            if (!hashSet.contains(chars[i])) { //如果hashset没有该字符就保存进去
                hashSet.add(chars[i]);
            } else {  //如果有，就让count++ （说明找到了一个成对的字符），然后把该字符移除
                hashSet.remove(chars[i]);
                count++;
            }
        }
        return hashSet.isEmpty() ? count * 2 : count * 2 + 1;
    }
}
